<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>预解析重名的问题</title>
</head>
<body>
    <script>
        // fn();
        // function fn(){console.log('hello world')}
        // fn();
        // var fn = 100;
        // fn();


        // 预解析 
        // 1.不需要
        // 2.需要 声明一个fn的变量并且赋值为一个函数
        // 3.不需要
        // 4. 需要
        // => 声明一个fn的变量 暂时不赋值
        // 5.不需要

        // 预解析结束 fn变量存在并且是一个函数 

        // 执行 
        // 1. fn() 
        // => 正常调用 
        // 2. fn() 
        // => 同上 
        // 3. fn =100 
        // fn 本来是个函数 但是此刻赋值为100 把函数覆盖了
        // 4.fn() 
        // 把fn当做一个函数来看待 但是上一步 fn不再是函数了
        // fn is not a function ；


        fn()
        var fn = 100;
        fn()
        function fn(){console.log('你长的好像一个人,我妈妈的儿媳妇')}
        fn()


        // 预解析 
        // 1.不需要
        // 2.声明一个fn变量 但是没有赋值 
        // 3.不需要
        // 4.需要 在浏览器声明一个fn的变量 并且直接给他赋值一个函数
        // 5.不需要 
        // 预解析结束 fn被声明 并且是个函数 



        // 执行阶段 

        // fn()  正常调用 
        // fn = 100 把变量赋值给fn ()

        // fn() 把fn当做一个函数来调用 而fn已经是个变量了 所以
        // 会报错  fn is not a function 

        function fn(num){
            console.log(num)
        }

    </script>
</body>
</html>